﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Lavanderia.BL;
using Lavanderia.Entities;
using Microsoft.Practices.Unity;
using System.Drawing.Printing;

namespace Lavanderia.UI
{
    public partial class FrmVenta : Form
    {
        [Dependency]
        public IVentaBL ventaBL { get; set; }

        [Dependency]
        public IDetalleVentaBL detVentaBL { get; set; }

        [Dependency]
        public IProductoBL productoBL { get; set; }

        [Dependency]
        public IUsuarioMenuBL usuMenuBL { get; set; }

        [Dependency]
        public IClienteBL clienteBL { get; set; }

        [Dependency]
        public ITrabajadorBL trabaBL { get; set; }

        [Dependency]
        public IClienteNaturalBL cliNaturalBL { get; set; }

        [Dependency]
        public IClienteJuridicoBL cliJuridicoBL { get; set; }


        public FrmVenta()
        {
            InitializeComponent();
            this.BuilUp();
        }

        public USUARIO currentUsuarioVenta { get; set; }

        private void FrmVenta_Load(object sender, EventArgs e)
        {
            if (currentUsuarioVenta != null)
            {
                menuLlena();
            }
            else
                cargaData();
        }

        public void menuLlena()
        {
            var datoUsuario = usuMenuBL.GetAllFromUsuarioByPersonaFromLogin(currentUsuarioVenta.TRABAJADOR.Dni);

            var permisos = (from c in usuMenuBL.GetAllFromUsuarioMenuByMenuId(datoUsuario.IdUsuario)
                            select c.MENU.Tag.ToString()).ToArray();

            System.Windows.Forms.Button[] botones = new System.Windows.Forms.Button[] { 
            this.btnNuevo,this.btnEditar,this.btnEliminar,this.btnEntregado,this.btnAbonar,this.btnVerAbonos,this.btnImprimir};

            //obtengo todos los PERMISOS NO ASIGNADOS al usuario
            var noVisible = from nv in botones
                            where !permisos.Contains(nv.Tag.ToString())
                            select nv;

            //coloco DESABILITADO a los permisos no asignados
            noVisible.ToList().ForEach(nv => nv.Enabled = false);

            cargaData();
        }

        public void cargaData()
        {
            vENTABindingSource.DataSource = ventaBL.GetAllFromVentas();
            var numVentas = vENTABindingSource.Count;
            lblCount.Text = Convert.ToString(numVentas);
        }

        //activar y desactivar los CRITERIOS DE BUSQUEDA
        private void rbtnCriterio_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtnCriterio.Checked)
            {
                TxtCriterioGeneral.ReadOnly = false;
                btnBuscarGeneral.Enabled = true;
                txtNCompr.ReadOnly = true;
                btnBusNComp.Enabled = false;
                dtpFecha.Enabled = false;
                TxtCriterioGeneral.Text = "";
                txtNCompr.Text = "";
            }
            else if (rbtnNComp.Checked)
            {
                TxtCriterioGeneral.ReadOnly = true;
                btnBuscarGeneral.Enabled = false;
                txtNCompr.ReadOnly = false;
                btnBusNComp.Enabled = true;
                dtpFecha.Enabled = false;
                TxtCriterioGeneral.Text = "";
                txtNCompr.Text = "";
            }
            else if (rbtnFecha.Checked)
            {
                TxtCriterioGeneral.ReadOnly = true;
                btnBuscarGeneral.Enabled = false;
                txtNCompr.ReadOnly = true;
                btnBusNComp.Enabled = false;
                dtpFecha.Enabled = true;
                TxtCriterioGeneral.Text = "";
                txtNCompr.Text = "";
            }
        }

        private void rbtnNComp_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtnCriterio.Checked)
            {
                TxtCriterioGeneral.ReadOnly = false;
                btnBuscarGeneral.Enabled = true;
                txtNCompr.ReadOnly = true;
                btnBusNComp.Enabled = false;
                dtpFecha.Enabled = false;
                TxtCriterioGeneral.Text = "";
                txtNCompr.Text = "";
            }
            else if (rbtnNComp.Checked)
            {
                TxtCriterioGeneral.ReadOnly = true;
                btnBuscarGeneral.Enabled = false;
                txtNCompr.ReadOnly = false;
                btnBusNComp.Enabled = true;
                dtpFecha.Enabled = false;
                TxtCriterioGeneral.Text = "";
                txtNCompr.Text = "";
            }
            else if (rbtnFecha.Checked)
            {
                TxtCriterioGeneral.ReadOnly = true;
                btnBuscarGeneral.Enabled = false;
                txtNCompr.ReadOnly = true;
                btnBusNComp.Enabled = false;
                dtpFecha.Enabled = true;
                TxtCriterioGeneral.Text = "";
                txtNCompr.Text = "";
            }
        }

        //METODOS BUSCAR TODAS LAS VENTAS
        private void btnBuscarGeneral_Click(object sender, EventArgs e)
        {
            if (cbxEntregadas.Checked == false)
            {
                vENTABindingSource.DataSource = ventaBL.GetAllFromVentasByCriterio(TxtCriterioGeneral.Text);
                var numVentas = vENTABindingSource.Count;
                lblCount.Text = Convert.ToString(numVentas);
                if (vENTABindingSource.Count == 0)
                {
                    MessageBox.Show("Venta no existente.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            else if (cbxEntregadas.Checked == true)
            {
                vENTABindingSource.DataSource = ventaBL.GetAllFromVentasByCriterioAndEntregadas(TxtCriterioGeneral.Text);
                var numVentas = vENTABindingSource.Count;
                lblCount.Text = Convert.ToString(numVentas);
                if (vENTABindingSource.Count == 0)
                {
                    MessageBox.Show("Venta no existente.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }

        private void TxtCriterioGeneral_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (cbxEntregadas.Checked == false)
                {
                    vENTABindingSource.DataSource = ventaBL.GetAllFromVentasByCriterio(TxtCriterioGeneral.Text);
                    var numVentas = vENTABindingSource.Count;
                    lblCount.Text = Convert.ToString(numVentas);
                    if (vENTABindingSource.Count == 0)
                    {
                        MessageBox.Show("Venta no existente.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                else if (cbxEntregadas.Checked == true)
                {
                    vENTABindingSource.DataSource = ventaBL.GetAllFromVentasByCriterioAndEntregadas(TxtCriterioGeneral.Text);
                    var numVentas = vENTABindingSource.Count;
                    lblCount.Text = Convert.ToString(numVentas);
                    if (vENTABindingSource.Count == 0)
                    {
                        MessageBox.Show("Venta no existente.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
            }
        }

        private void btnBusNComp_Click(object sender, EventArgs e)
        {
            if (cbxEntregadas.Checked == false)
            {
                if (txtNCompr.Text != "")
                {
                    vENTABindingSource.DataSource = ventaBL.GetAllFromVentasByNComprobante(Convert.ToInt32(txtNCompr.Text));
                    var numVentas = vENTABindingSource.Count;
                    lblCount.Text = Convert.ToString(numVentas);
                    if (vENTABindingSource.Count == 0)
                    {
                        MessageBox.Show("Venta no existente.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
            }
            else if (cbxEntregadas.Checked == true)
            {
                if (txtNCompr.Text != "")
                {
                    vENTABindingSource.DataSource = ventaBL.GetAllFromVentasByNComprobanteAndEntregadas(Convert.ToInt32(txtNCompr.Text));
                    var numVentas = vENTABindingSource.Count;
                    lblCount.Text = Convert.ToString(numVentas);
                    if (vENTABindingSource.Count == 0)
                    {
                        MessageBox.Show("Venta no existente.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
            }
        }

        private void txtNCompr_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (cbxEntregadas.Checked == false)
                {
                    if (txtNCompr.Text != "")
                    {
                        vENTABindingSource.DataSource = ventaBL.GetAllFromVentasByNComprobante(Convert.ToInt32(txtNCompr.Text));
                        var numVentas = vENTABindingSource.Count;
                        lblCount.Text = Convert.ToString(numVentas);
                        if (vENTABindingSource.Count == 0)
                        {
                            MessageBox.Show("Venta no existente.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                    }
                }
                else if (cbxEntregadas.Checked == true)
                {
                    if (txtNCompr.Text != "")
                    {
                        vENTABindingSource.DataSource = ventaBL.GetAllFromVentasByNComprobanteAndEntregadas(Convert.ToInt32(txtNCompr.Text));
                        var numVentas = vENTABindingSource.Count;
                        lblCount.Text = Convert.ToString(numVentas);
                        if (vENTABindingSource.Count == 0)
                        {
                            MessageBox.Show("Venta no existente.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                    }
                }
            }
        }

        private void dtpFecha_ValueChanged(object sender, EventArgs e)
        {
            if (cbxEntregadas.Checked == false)
            {
                vENTABindingSource.DataSource = ventaBL.GetAllFromVentasByFecha(dtpFecha.Value.Date);
                var numVentas = vENTABindingSource.Count;
                lblCount.Text = Convert.ToString(numVentas);
                if (vENTABindingSource.Count == 0)
                {
                    MessageBox.Show("Venta no existente.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            else if (cbxEntregadas.Checked == true)
            {
                vENTABindingSource.DataSource = ventaBL.GetAllFromVentasByFechaAndEntregadas(dtpFecha.Value.Date);
                var numVentas = vENTABindingSource.Count;
                lblCount.Text = Convert.ToString(numVentas);
                if (vENTABindingSource.Count == 0)
                {
                    MessageBox.Show("Venta no existente.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }

        //EVENTO para mostrar el detalle de la venta
        private void vENTADataGridView_CurrentCellChanged(object sender, EventArgs e)
        {
            var currentVenta = vENTABindingSource.Current as VENTA;
            if (currentVenta != null)
            {
                dETALLE_VENTABindingSource.DataSource = detVentaBL.GetAllFromDetalleVentaByVentaId(currentVenta.Id);

                //CLIENTE
                for (int count = 0; count < vENTADataGridView.Rows.Count; count++)
                {
                    if (currentVenta != null)
                    {
                        CLIENTE a = vENTADataGridView.Rows[count].Cells[0].Value as CLIENTE;
                        var cliJuri = (from c in cliJuridicoBL.GetAllFromClienteJuridico()
                                       where c.ClienteJuridicoId.Equals(a.CodCli)
                                       select c).SingleOrDefault();
                        var cliNat = (from c in cliNaturalBL.GetAllFromClienteNatural()
                                      where c.ClienteNaturalId.Equals(a.CodCli)
                                      select c).SingleOrDefault();

                        if (cliJuri != null)
                        {
                            vENTADataGridView.Rows[count].Cells[1].Value = cliJuri.Ruc.ToString() + " - " + cliJuri.RazonSocial.ToString();
                        }
                        else if (cliNat != null)
                        {
                            vENTADataGridView.Rows[count].Cells[1].Value = cliNat.Dni.ToString() + " - " + cliNat.NombreCompleto.ToString();
                        }
                    }
                }
            }
        }

        private void vENTARadGridView_Click(object sender, EventArgs e)
        {
            var currentVenta = vENTABindingSource.Current as VENTA;
            if (currentVenta != null)
            {
                dETALLE_VENTABindingSource.DataSource = detVentaBL.GetAllFromDetalleVentaByVentaId(currentVenta.Id);

                //CLIENTE
                for (int count = 0; count < vENTADataGridView.Rows.Count; count++)
                {
                    if (currentVenta != null)
                    {
                        CLIENTE a = vENTADataGridView.Rows[count].Cells[0].Value as CLIENTE;
                        var cliJuri = (from c in cliJuridicoBL.GetAllFromClienteJuridico()
                                       where c.ClienteJuridicoId.Equals(a.CodCli)
                                       select c).SingleOrDefault();
                        var cliNat = (from c in cliNaturalBL.GetAllFromClienteNatural()
                                      where c.ClienteNaturalId.Equals(a.CodCli)
                                      select c).SingleOrDefault();

                        if (cliJuri != null)
                        {
                            vENTADataGridView.Rows[count].Cells[1].Value = cliJuri.Ruc.ToString() + " - " + cliJuri.RazonSocial.ToString();
                        }
                        else if (cliNat != null)
                        {
                            vENTADataGridView.Rows[count].Cells[1].Value = cliNat.Dni.ToString() + " - " + cliNat.NombreCompleto.ToString();
                        }
                    }
                }
            }
        }

        private void btnNuevo_Click(object sender, EventArgs e)
        {
            FrmMttoVenta frm = new FrmMttoVenta();
            frm.currentUsuarioVenta = currentUsuarioVenta;
            frm.NuevaVenta();
            frm.ShowDialog();
            cargaData();
        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            var venta = vENTABindingSource.Current as VENTA;
            var detVenta = detVentaBL.GetAllFromDetalleVentaByVentaId(venta.Id);

            venta.DETALLE_VENTA = detVenta;

            if (venta != null)
            {
                FrmMttoVenta frm = new FrmMttoVenta();
                frm._venta = venta;
                frm.currentUsuarioVenta = currentUsuarioVenta;
                frm.EditarVenta();
                frm.ShowDialog();
                cargaData();
            }
            else
            {
                MessageBox.Show("Debe seleccionar una Venta.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            var venta = vENTABindingSource.Current as VENTA;

            if (venta != null)
            {
                if (venta.Cancelado == false || venta.Cancelado == null)
                {
                    FrmVentaMotivo frm = new FrmVentaMotivo();
                    frm.ShowDialog();
                    if (frm.currentVentaMotivo != null)
                    {
                        if (frm.currentVentaMotivo.Motivo != null)
                        {
                            venta.Motivo = frm.currentVentaMotivo.Motivo.ToUpper();
                            venta.Cancelado = true;
                            ventaBL.UpdateVentas(venta);

                            //foreach (var item in venta.DETALLE_VENTA)
                            //{
                            //    var producto = productoBL.GetAllProductoById(item.IdProducto);
                            //    int nuevoStock = ((producto.Stock) + item.Cantidad);
                            //    producto.Stock = nuevoStock;
                            //    productoBL.UpdateProducto(producto);
                            //}

                            foreach (var item in venta.DETALLE_VENTA)
                            {
                                item.Anulado = true;
                                detVentaBL.UpdateDetalleVenta(item);
                            }
                            MessageBox.Show("Venta Cancelado con exito", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            cargaData();
                        }
                        else
                            MessageBox.Show("Debe ingresar un motivo", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                else
                {
                    MessageBox.Show("La Venta ya ha sido cancelada.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            else
            {
                MessageBox.Show("Debe seleccionar una Venta.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void txtNCompr_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsNumber(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        //check box CANCELADOS
        private void cbxCancelados_CheckedChanged(object sender, EventArgs e)
        {
            if (cbxCancelados.Checked == true)
            {
                vENTABindingSource.DataSource = ventaBL.GetAllFromVentasCanceladas();
                gbCriterios.Enabled = false;
                TxtCriterioGeneral.Text = "";
                txtNCompr.Text = "";
            }
            else if (cbxCancelados.Checked == false)
            {
                cargaData();
                gbCriterios.Enabled = true;
                TxtCriterioGeneral.Text = "";
                txtNCompr.Text = "";
            }
        }

        //check box ENTREGADAS
        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (cbxEntregadas.Checked == true)
            {
                vENTABindingSource.DataSource = (from c in ventaBL.GetAllFromVentasEntregadas()
                                                     where c.Cancelado==false || c.Cancelado==null
                                                     orderby c.Id descending
                                                     select c).ToList();
                gbCriterios.Enabled = true;
                TxtCriterioGeneral.Text = "";
                txtNCompr.Text = "";
            }
            else if (cbxEntregadas.Checked == false)
            {
                cargaData();
                gbCriterios.Enabled = true;
                TxtCriterioGeneral.Text = "";
                txtNCompr.Text = "";
            }
        }

        private void btnEntregado_Click(object sender, EventArgs e)
        {
            var venta = vENTABindingSource.Current as VENTA;
            //var abono = new ABONO();
            decimal totNuevo = 0;

            if (venta != null)
            {
                if (venta.Entregado == false || venta.Entregado == null)
                {
                   FrmVentaEntregado frm = new FrmVentaEntregado();
                    frm._venta = venta;                    
                    frm.entragaVenta();
                    
                    if (venta.Saldo == 0 && venta.Acuenta == venta.Total)
                    {
                        venta.Entregado = true;
                        venta.Pago = "CANCELADO";
                        venta.Entrega = "REALIZADA";
                        venta.FechaEntrega = DateTime.Now;
                        //venta.FechaAbono = DateTime.Now;
                        //venta.TotalAbono = 0;
                        ventaBL.UpdateVentas(venta);

                        //LLENANDO LA TABLA ABONO
                        //abono.Fecha = DateTime.Now;
                        //abono.Total = 0;
                        //abono.IdVenta = venta.Id;
                        //abonoBL.AddAbono(abono);

                        MessageBox.Show("Venta Entregada con exito", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        cargaData();
                    }
                    else
                    {
                        
                        frm.ShowDialog();
                        if (frm.currentVentaEntrega != null)
                        {
                            if (frm.currentVentaEntrega.Acuenta != null)
                            {
                                if (frm.currentVentaEntrega.FechaEntrega != null)
                                {
                                    
                                        totNuevo = frm.saldoTA;
                                    
                                }
                                else if (frm.currentVentaEntrega.FechaEntrega == null)
                                {
                                    totNuevo = frm.saldoTA;
                                }
                                venta.Acuenta = frm.currentVentaEntrega.Acuenta;
                                if (totNuevo > 0)
                                {
                                    //venta.Saldo = (frm.currentVentaEntrega.Total - (venta.Acuenta + totNuevo));
                                    venta.Entregado = true;
                                    venta.Pago = "CANCELADO";
                                    venta.Entrega = "REALIZADA";
                                    venta.FechaEntrega = DateTime.Now;
                                    //venta.FechaAbono = DateTime.Now;
                                    //venta.TotalAbono = totNuevo;
                                    ventaBL.UpdateVentas(venta);

                                    //LLENANDO LA TABLA ABONO
                                    //abono.Fecha = DateTime.Now;
                                    //abono.Total = frm.saldoTA;
                                    //abono.IdVenta = venta.Id;
                                    //abonoBL.AddAbono(abono);

                                    MessageBox.Show("Venta Entregada con exito", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    cargaData();
                                }
                            }
                            else
                                MessageBox.Show("Debe ingresar un monto", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                    }
                }
                else
                {
                    MessageBox.Show("La Venta ya ha sido entregada.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            else
            {
                MessageBox.Show("Debe seleccionar una Venta.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnImprimir_Click(object sender, EventArgs e)
        {
            PrintDialog printDialog = new PrintDialog();

            PrintDocument printDocument = new PrintDocument();

            printDialog.Document = printDocument; //add the document to the dialog box...        

            printDocument.PrintPage += new PrintPageEventHandler(CreateReceipt); //add an event handler that will do the printing

            //on a till you will not want to ask the user where to print but this is fine for the test envoironment.

            DialogResult result = printDialog.ShowDialog();

            if (result == DialogResult.OK)
            {
                printDocument.Print();
            }
        }

        public void CreateReceipt(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            var venta= vENTABindingSource.Current as VENTA;
            var cliente = clienteBL.GetAllFRomClienteByCodigo(Convert.ToString(venta.IdCliente));
            var listDetVenta = dETALLE_VENTABindingSource.DataSource as List<DETALLE_VENTA>;
            var trabajador = trabaBL.GetAllFromTrabajadorById(venta.IdTrabajador ?? default(int));


            if (venta.Observaciones == null)
            {
                venta.Observaciones = "-";
            }


            Graphics graphic = e.Graphics;

            Font font = new Font("Arial", 10, FontStyle.Regular); //must use a mono spaced font as the spaces need to line up

            float fontHeight = font.GetHeight();

            int startX = 10;
            int startY = 10;
            int offset = 40;

            //CABECERA DEL TICKET
            //graphic.DrawString("           OPTICA CRISTAL", new Font("Arial", 11), new SolidBrush(Color.Black), startX, startY);
            //string direc = "Jr. Amalia Puga N° 1020".PadRight(30) + "369814";
            //graphic.DrawString("        OPTICA VALENTINO", new Font("Arial", 11), new SolidBrush(Color.Black), startX, startY);
            //string direc = "Jr. Amalia Puga N° 1025".PadRight(30) + "369814";
            graphic.DrawString("        OPTICA PRISMA", new Font("Arial", 11), new SolidBrush(Color.Black), startX, startY);
            string direc = "Jr. Amalia Puga N° 1065".PadRight(30) + "369814";
            graphic.DrawString(direc, new Font("Arial", 10), new SolidBrush(Color.Black), startX, startY + offset);
            offset = offset + (int)fontHeight; //make the spacing consistent
            graphic.DrawString("----------------------------------", font, new SolidBrush(Color.Black), startX, startY + offset);
            offset = offset + (int)fontHeight + 5; //make the spacing consistent

            //CABECERA DATOS CLIENTE
            //string telCel = ("Telef: " + cliente.Telefono).PadRight(20) + "Cel: " + cliente.Celular;
            ////graphic.DrawString("Ticket: " + venta.NComprobante, font, new SolidBrush(Color.Black), startX, startY + offset);
            //offset = offset + (int)fontHeight;
            //graphic.DrawString("Fecha: " + venta.Fecha, font, new SolidBrush(Color.Black), startX, startY + offset);
            //offset = offset + (int)fontHeight;
            //graphic.DrawString("Cliente: " + cliente.NombreCompleto, new Font("Arial", 9), new SolidBrush(Color.Black), startX, startY + offset);
            //offset = offset + (int)fontHeight;
            //graphic.DrawString(telCel, font, new SolidBrush(Color.Black), startX, startY + offset);
            offset = offset + (int)fontHeight; //make the spacing consistent
            graphic.DrawString("----------------------------------", font, new SolidBrush(Color.Black), startX, startY + offset);
            offset = offset + (int)fontHeight + 5; //make the spacing consistent

            //CABECERA DE LOS PRODUCTOS
            string cabProd = "Producto".PadRight(24) + "Cnt".PadRight(5) + "Pre".PadRight(8) + "Total";
            graphic.DrawString(cabProd, font, new SolidBrush(Color.Black), startX, startY + offset);
            offset = offset + (int)fontHeight; //make the spacing consistent
            graphic.DrawString("----------------------------------", font, new SolidBrush(Color.Black), startX, startY + offset);
            offset = offset + (int)fontHeight + 5; //make the spacing consistent

            if (listDetVenta != null)
            {
                //foreach (var item in listDetVenta)
                //{
                //    //if (item.PRODUCTO.CodMontura == null)
                //    //{
                //    //    item.PRODUCTO.CodMontura = "";
                //    //}
                //    //string prodNom = (item.PRODUCTO.NombreMarca.ToString().ToLower() + " " + item.PRODUCTO.CodMontura.ToString()).PadRight(30) + (item.Cantidad.ToString()).PadRight(5) + (item.Precio.ToString()).PadRight(10) + item.Importe.ToString();
                //    //string prodMed = (item.PRODUCTO.Medida.ToString().ToLower());
                //    //string prodModelo;
                //    //if (item.PRODUCTO.IdModelo != null)
                //    //{
                //    //    prodModelo = (item.PRODUCTO.MODELO_MONTURAS.ToString().ToLower());
                //    //}
                //    //else
                //    //    prodModelo = "";

                //    //graphic.DrawString(prodNom, new Font("Arial", 9), new SolidBrush(Color.Black), startX, startY + offset);
                //    //offset = offset + (int)fontHeight;
                //    //graphic.DrawString(prodModelo + prodMed, new Font("Arial", 9), new SolidBrush(Color.Black), startX, startY + offset);
                //    //offset = offset + (int)fontHeight;
                //}
            }
            offset = offset + 20; //make some room so that the total stands out.

            //IMPRIMIMOS LA PARTE DEL TOTA, A CUENTA Y SALDO
            graphic.DrawString("Total: ".PadRight(25) + String.Format("{0:c}", venta.Total), font, new SolidBrush(Color.Black), startX, startY + offset);
            offset = offset + (int)fontHeight;
            graphic.DrawString("A Cuenta: ".PadRight(21) + String.Format("{0:c}", venta.Acuenta), font, new SolidBrush(Color.Black), startX, startY + offset);
            offset = offset + (int)fontHeight;
            graphic.DrawString("Saldo: ".PadRight(25) + String.Format("{0:c}", venta.Saldo), font, new SolidBrush(Color.Black), startX, startY + offset);
            offset = offset + (int)fontHeight;

            offset = offset + 20; //make some room so that the total stands out.

            //IMPRIMIMOS LA PARTE DE LA OBSERVACION...... ENTREGADO Y PAGADO
            graphic.DrawString("Observación: "+venta.Observaciones, font, new SolidBrush(Color.Black), startX, startY + offset);
            offset = offset + (int)fontHeight;
            graphic.DrawString("Pago:  " + venta.Pago, font, new SolidBrush(Color.Black), startX, startY + offset);
            offset = offset + (int)fontHeight;
            graphic.DrawString(("Entrega:  " + venta.Entrega).PadRight(25) + venta.FechaEntrega.Value.ToShortDateString(), font, new SolidBrush(Color.Black), startX, startY + offset);
            offset = offset + (int)fontHeight;
            graphic.DrawString("----------------------------------", font, new SolidBrush(Color.Black), startX, startY + offset);
            offset = offset + (int)fontHeight + 5;

            offset = offset + (int)fontHeight;
            graphic.DrawString("----------------------------------", font, new SolidBrush(Color.Black), startX, startY + offset);
            offset = offset + (int)fontHeight + 5;
            graphic.DrawString("Cajero:   " + trabajador.NombreCompleto, new Font("Arial", 8), new SolidBrush(Color.Black), startX, startY + offset);

            offset = offset + 30; //make some room so that the total stands out.

            graphic.DrawString("       Gracias por su preferencia", new Font("Arial", 9, FontStyle.Bold), new SolidBrush(Color.Black), startX, startY + offset);
            offset = offset + 20;
            graphic.DrawString("Nota: Canjear por boleta y pasado los 30 días", new Font("Arial", 7), new SolidBrush(Color.Black), startX, startY + offset);
            offset = offset + 15;
            graphic.DrawString("      no habra opción a cambio o devolución.", new Font("Arial", 7), new SolidBrush(Color.Black), startX, startY + offset);

        }

        private void btnAbonar_Click(object sender, EventArgs e)
        {
            //var venta = vENTABindingSource.Current as VENTA;
            //var abono = new ABONO();
            //decimal totNuevo=0;

            //if (venta != null)
            //{
            //    if (venta.Entregado == false || venta.Entregado == null)
            //    {
            //        FrmVentaEntregado frm = new FrmVentaEntregado();
            //        frm.Abono();
            //        frm._venta = venta;
            //        frm.entragaVenta();
            //        frm.ShowDialog();
            //        if (frm.currentVentaEntrega != null)
            //        {
            //            if (frm.currentVentaEntrega.Acuenta != null)
            //            {
            //                if (frm.currentVentaEntrega.FechaAbono != null)
            //                {
            //                    if (frm.currentVentaEntrega.FechaAbono.Value.Date == DateTime.Now.Date)
            //                    {
            //                        totNuevo = (frm.currentVentaEntrega.TotalAbono ?? default(decimal)) + frm.saldoTA;
            //                    }
            //                    else if (frm.currentVentaEntrega.FechaAbono.Value.Date != DateTime.Now.Date)
            //                    {
            //                        totNuevo = frm.saldoTA;
            //                    }
            //                }
            //                else if (frm.currentVentaEntrega.FechaAbono == null)
            //                {
            //                    totNuevo = frm.saldoTA;
            //                }
            //                //venta.Acuenta = frm.currentVentaEntrega.Acuenta;
            //                venta.Saldo = (frm.currentVentaEntrega.Total - (venta.Acuenta + totNuevo));
            //                venta.FechaAbono = DateTime.Now;
            //                venta.TotalAbono = totNuevo;
            //                ventaBL.UpdateVentas(venta);

            //                //LLENANDO LA TABLA ABONO
            //                abono.Fecha=DateTime.Now;
            //                abono.Total=frm.saldoTA;
            //                abono.IdVenta=venta.Id;
            //                abonoBL.AddAbono(abono);

            //                MessageBox.Show("Venta Abonada con exito", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            //                cargaData();
            //            }
            //            else
            //                MessageBox.Show("Debe ingresar un monto", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            //        }
            //    }
            //    else
            //    {
            //        MessageBox.Show("La Venta ya ha sido entregada.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            //    }
            //}
            //else
            //{
            //    MessageBox.Show("Debe seleccionar una Venta.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            //}
        }

        private void cbxPendientes_CheckedChanged(object sender, EventArgs e)
        {
            if (cbxPendientes.Checked == true)
            {
                vENTABindingSource.DataSource = (from c in ventaBL.GetAllFromVentas()
                                                     where c.Entregado==false || c.Entregado==null
                                                     select c).ToList();
                gbCriterios.Enabled = true;
                TxtCriterioGeneral.Text = "";
                txtNCompr.Text = "";
            }
            else if (cbxPendientes.Checked == false)
            {
                cargaData();
                gbCriterios.Enabled = true;
                TxtCriterioGeneral.Text = "";
                txtNCompr.Text = "";
            }
        }

        private void btnVerAbonos_Click(object sender, EventArgs e)
        {
            //var venta = vENTABindingSource.Current as VENTA;

            //FrmAbono frm = new FrmAbono();
            //frm._currentVenta = venta;
            //frm.ShowDialog();
        }
    }
}
